Deno workspacesを採用したプロジェクトでChangelogの生成を自動化する
はじめに
やりたいこと
1. ワークスペースの各パッケージはpackages/ディレクトリに配置する
2. Changelogは各パッケージごとにpackages/<package>/CHANGELOG.mdに生成したい
3. Changelogの内容はコミットログから自動生成したい
課題
選択肢について
Changelogの生成のみを行ってくれるシンプルなツール
--include-pathオプションを使う手もあるものの、各パッケージにまたがる重要なコミットがChangelogから欠落してしまう可能性がある そのため、git-cliffの設定ファイルをワークスペースの各パッケージごとに生成することで対応することにしました 各パッケージ向けの設定ファイルを手動でメンテナンスすると大変なので、cliff.template.tomlという各パッケージ向けの設定ファイルのテンプレートとして機能するファイルを用意することにしました このスクリプトは以下のような処理を行っています
1. --package/--current-version/--new-versionオプションの内容を解析します
--package - リリースしたいパッケージの名前 (これはpackages/<package>の<package>にあわせる)
--current-version - リリースしたいパッケージ(--package)の現時点での最新バージョン`
--new-version - リリースしたいパッケージ(--package)のこれからリリース予定のバージョン
2. cliff.template.tomlに含まれる$PACKAGEを--packageで指定されたパッケージ名に置換した後、tmp/cliff/<package>.tomlへ保存します
--unreleased - 特定のタグに所属していないコミットのみを対象にします
--prepend packages/<package>/CHANGELOG.md - 指定されたパッケージ直下のCHANGELOG.mdに内容を追記します)
--config tmp/cliff/<package>.toml - 2のステップで生成したgit-cliffの設定ファイルを読み込ませます --tag <new-version> - <new-version>には${--package}@${--new-version}を設定します
<old-version>..HEAD - <old-version>には${--package}@${--current-version}を指定します
4. packages/<package>/deno.jsonのversionを--new-versionで指定された値へ置き換えます